<?php
/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * Помощник вида, реализующий загрузку файла через Blueimp File Upload
 * 
 * @category Phorm
 * @package JQuery_View_Helper
 * @name /Phorm/JQuery/View/Helper/MediaFile.php
 * @copyright phorm.ru
 * @since 19.03.2012
 * @author vladimir@kachalov.net
 */

class Phorm_JQuery_View_Helper_MediaFile extends ZendX_JQuery_View_Helper_UiWidget {
	
	/**
	 * Рисуем элемент
	 *
	 * @param string $name Имя HTML-элемента
	 * @param mixed $value Значение элемента
	 * @param array $params Массив параметров
	 * @param array $attribs Массив атрибутов HTML-элемента
	 * @return string
	 */
    
	public function mediaFile($name, $value = null, array $params = array(), $attribs = null) {
		
		$translate = $params['translate'];
		unset($params['translate']);
		
		$jquery_handler = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
		
		/**
		 * Переделываем свойство mediatype в data-mediatype (для совместимости с JQuery.data())
		 */
		
		if(!isset($params['mediatype'])) $params['mediatype'] = 'image';
		$params['data-mediatype'] = $params['mediatype'];
		unset($params['mediatype']);
		
		/**
		 * Имя элемента типа File делаем просто рандомным, на форме обрабатываться будет поле hidden
		 */
		
		$params['id'] = uniqid();
		
		/**
		 * Значение может быть массивом MediaInfo или числом mediaid
		 * Если значение не является массивом, то приводим его к массиву MediaInfo
		 */
		
		if(!is_array($value) && $value>0) {
			require_once 'Phorm/Media.php';
        	$Media = new Phorm_Media();
        	if($MediaInfo = $Media->getMediaInfo($value)) $value = $MediaInfo;
		}
		
		/**
		 * Добавляем базовый JS
		 */
		
		//$this->jquery->addJavascriptFile($this->view->BaseUrl().'/ui/phorm/phorm.js');
		$this->jquery->addJavascriptFile($this->view->BaseUrl().'/ui/js/jquery.livequery.min.js');
		$this->jquery->addJavascriptFile($this->view->BaseUrl().'/ui/blueimp/js/jquery.fileupload.js');
		
		/** @todo мб перенести в phorm.js поскольку подпорка под IE требует переопределения Phorm_Controller_Module_Control_Media::uploadAction */
		$forceIframeTransport = false;
		$agent = new Zend_Http_UserAgent();
		$device = $agent->getDevice();
		if(strtolower($device->getBrowser()) == 'internet explorer' && $device->getBrowserVersion() <= 8) {
			$this->jquery->addJavascriptFile($this->view->BaseUrl().'/ui/blueimp/js/jquery.iframe-transport.js');
			$forceIframeTransport = true;
		}
		
		$url = isset($params['url']) ? ', url: "' . $params['url'] . '"' : '';
		
		$js = sprintf('var %s; %s("#%s").livequery(function(){%s = %s(this).phormMediaUploader(%s)});',
            'var_' . $params['id'],
			$jquery_handler,
            $params['id'],
            'var_' . $params['id'],
            $jquery_handler,
            '{type:"' . $params['data-mediatype'] . '", forceIframeTransport: ' . (int)$forceIframeTransport . $url . '}'  
        );
        
        $js = sprintf('%s("%s").livequery(function(){%s(this).phormMediaUploader(%s).setValue($(this).data("mediainfo"))});',
			$jquery_handler,
            '[data-mediatype]',
            $jquery_handler,
            '{type:"' . $params['data-mediatype'] . '", forceIframeTransport: ' . (int)$forceIframeTransport . $url . '}'  
        );
        
        $this->jquery->addOnLoad($js);
        
        /**
         * Устанавливаем пришедшие значения
         */
        
        if(!empty($value)) {
        	$params['data-mediainfo'] = Zend_Json::encode($value);
        	//$js = sprintf('%s.setValue(%s)','var_' . $params['id'],Zend_Json::encode($value));
        	//$this->jquery->addOnLoad($js);
        }
		
        /**
         * Возвращаем поле выбора файла и hidden в котором хранится mediaid
         */
        
		return $this->view->formFile($params['id'],$params) . $this->view->formHidden($name);
		
	}
	
}